<?php

/** @brief Clase para componentes graficos.
	Registra propiedades graficas escenciales y eventos que tiene que ver con el mouse, ademas provee
	renderizado de XHTML, CSS y JS.
*/

class x_graphic extends x_base{
	
	function __construct($id){
		parent::__construct($id);
		$this->props->reg_arr( array('text','x','y','width','height','cursor','color','bgcolor','visible','align',
		'border','font','font.size','font.bold','font.weight'));
		$this->events->reg_arr( array('onclick','ondblclick','onmousedown','onmousemove','onmouseout','onmouseover','onmouseup') );
	}
	
/** @brief Obtiene el valor absoluto de una propiedad.
	Toma una propiedad y la suma recursivamente a la de todos los antecesores,
	al parecer esto sirve, para calcular los verdaderos x e y del componente.
    @param $prop nombre de la propiedad
    @return valor de la operacion
*/	
	private function getabs($prop){
		$val = $this->get_prop($prop);
		//if($this->parent)
		//		$val += $this->parent->getabs($prop);
		return $val;
	}

/** @brief Agrega propiedades a la clave css generada por la clase x_graphic.
	Debe ser implementada por clases hijas si se desea agregar alguna nueva propiedad.
    @return String con CSS a agregarse.
*/	
	function extendCSS(){
	}
	
/** @brief Genera el codigo CSS que representa las propiedades graficas del componente.
	Este metodo NO DEBE ser sobreescrito en clases hijas, lo correcto para agregar claves al css
	es sobreescribir la clase extendCSS(), que es llamada interiormente.
    @return String con el CSS.
*/	
	function renderCSS(){ //no debe ser heredada... deberia heredar extendCSS
		$s.=pcss( 'position', 'absolute' );
		$s.=pcss( 'display', $this->get_prop('visible') == 'false' ? 'none':'block' );
		$s.=pcss( 'left', $this->getabs('x'),DUN );
		$s.=pcss( 'top', $this->getabs('y'),DUN );
		$s.=pcss( 'height', $this->get_prop('height'),DUN );
		$s.=pcss( 'width', $this->get_prop('width'),DUN );
		$s.=pcss( 'cursor', $this->get_prop('cursor') );
		$s.=pcss( 'color', $this->get_prop('color') );
		$s.=pcss( 'background-color', $this->get_prop('bgcolor') );
		$s.=pcss( 'text-align', $this->get_prop('align') );
		$s.=pcss( 'border',$this->get_prop('border') );
		$s.=pcss( 'font-family',$this->get_prop('font'),DUN );
		$s.=pcss( 'font-size',$this->get_prop('font.size'),DUN);
		$s.=pcss( 'font-weight',$this->get_prop('font.weight') ) ;
		
		$s.= $this->extendCSS();

		if(!emptystr($s)){ //para evitar que se imprima si no tiene propiedades
			$a.=begincss($this->get_prop('id'));
			$b.=endcss($this->get_prop('id'));
			return $a.$s.$b;
		}
		else
			return '';
	}

/** @brief Retorna el codigo XHTML del componente.
	Debe ser implementada por clases hijas para retornar el codigo XHTML del componente.
    @return String con XHTML.
*/	
	function renderXHTML(){
	}

}

?>